package com.wyix.repository;

import com.wyix.domain.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author wangdx
 * @since 2025/8/26
 */
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
    // 1. 按书名模糊查询（Spring Data JPA 自动解析方法名生成 SQL）
    List<Book> findByBookNameLike(String bookName);

    // 2. 按作者查询
    List<Book> findByAuthor(String author);

    // 3. 自定义 HQL 查询：查询库存大于指定数量的图书
    @Query("SELECT b FROM Book b WHERE b.stock > :stock ORDER BY b.bookName ASC")
    List<Book> findBooksWithStockGreaterThan(@Param("stock") Integer stock);

    // 4. 趣味功能：查询借阅次数最多的前 10 本书（关联借阅记录）
    @Query("SELECT b, COUNT(br) AS borrowCount " +
            "FROM Book b LEFT JOIN b.borrowRecords br " +
            "GROUP BY b.id " +
            "ORDER BY borrowCount DESC")
    List<Object[]> findTop10BorrowedBooks();
}
